package com.parent.framework.elasticsearch.service;


import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;

import java.util.List;

/**
 * @Author yan
 * @Date 2023/9/28 0028 13:43
 * @Description
 */
public interface ElasticsearchService {
    /**
     * 通用查询
     * @param nativeSearchQuery
     * @param aclass
     * @return
     * @param <T>
     */
    <T> SearchHits<T> search(NativeSearchQuery nativeSearchQuery, Class<T> aclass);

    /**
     * @param aclass            ES实体
     * @param nativeSearchQuery 搜索构造
     * @param highlightFields   高亮字段
     * @param keys              需要高亮的字--集合
     * @param boolHighlight     是否开启高亮
     * @param preTag            高亮前缀
     * @param postTag           高亮后缀
     * @param <T>
     * @return List
     */
    <T> List<T> searchList(Class<T> aclass, NativeSearchQuery nativeSearchQuery,
                           List<String> highlightFields, List<String> keys, Boolean boolHighlight, String preTag, String postTag);


    /**
     * @param aclass            ES实体
     * @param nativeSearchQuery 搜索构造
     * @param highlightFields   高亮字段
     * @param keys              需要高亮的字--集合
     * @param boolHighlight     是否开启高亮
     * @param preTag            高亮前缀
     * @param postTag           高亮后缀
     * @param pageNumber
     * @param pageSize
     * @param <T>
     * @return ResultPage
     */
/*
    <T> ResultPage<T> searchPage(Class<T> aclass, NativeSearchQuery nativeSearchQuery,
                                 List<String> highlightFields, List<String> keys, Boolean boolHighlight, String preTag, String postTag,
                                 Integer pageNumber, Integer pageSize);
*/
}
